/*************************************************************************
	> File Name: 003.求结构体中各个字段的偏移量_v2.c
	> Author: Maureen 
	> Mail: Maureen@qq.com 
	> Created Time: 四  8/26 23:03:04 2021
 ************************************************************************/

#include <stdio.h>

//1. 先将空地址转换为T *类型，目的就是将从地址 0 开始的存储空间映射为一个 T 类型的对象
//2. 获取结构体中的 field 字段
//3. 获取 field 字段的地址
//4. 将地址转换为 long 类型
#define OFFSET(T, field) (long)(&(((T *)NULL)->field))

struct Data {
    int a;
    double b;
    char c;
};

int main() {
    printf("%ld\n", OFFSET(struct Data, a)); //0
    printf("%ld\n", OFFSET(struct Data, b)); //8
    printf("%ld\n", OFFSET(struct Data, c)); //16
    return 0;
}
